home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / GCC257S5.ZIP / src / gcc-257 / pcp.h < prev    next >
C/C++ Source or Header  |  1992-08-01  |  3KB  |  101 lines

  1. /* pcp.h -- Describes the format of a precompiled file
  2.    Copyright (C) 1990 Free Software Foundation, Inc.
  3.  
  4. This file is part of GNU CC.
  5.  
  6. GNU CC is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2, or (at your option)
  9. any later version.
  10.  
  11. GNU CC is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with GNU CC; see the file COPYING.  If not, write to
  18. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.  
  20.  
  21.  
  22. /* Structure allocated for every string in a precompiled file */
  23. typedef struct stringdef STRINGDEF;
  24. struct stringdef
  25. {
  26.   U_CHAR *contents;        /* String to include */
  27.   int len;            /* Its length */
  28.   int writeflag;        /* Whether we write this */
  29.   int lineno;            /* Linenumber of source file */
  30.   U_CHAR *filename;        /* Name of source file */
  31.   STRINGDEF *chain;        /* Global list of strings in natural order */
  32.   int output_mark;        /* Where in the output this goes */
  33. };
  34.  
  35. typedef struct keydef KEYDEF;
  36. struct keydef
  37. {
  38.   STRINGDEF *str;
  39.   KEYDEF *chain;
  40. };
  41.  
  42. /* Format: */
  43. /* A precompiled file starts with a series of #define and #undef
  44.  statements:
  45.     #define MAC DEF     ---   Indicates MAC must be defined with defn DEF
  46.     #define MAC         ---   Indicates MAC must be defined with any defn
  47.     #undef MAC          ---   Indicates MAC cannot be defined
  48.  
  49. These preconditions must be true for a precompiled file to be used.  
  50. The preconditions section is null terminated. */
  51.  
  52. /* Then, there is a four byte number (in network byte order) which */
  53.  /* indicates the number of strings the file contains. */
  54.  
  55. /* Each string contains a STRINGDEF structure.  The only component of */
  56.  /* the STRINGDEF structure which is used is the lineno field, which */
  57.  /* should hold the line number in the original header file.  */
  58.  /* Then follows the string, followed by a null.  Then comes a four */
  59.  /* byte number (again, in network byte order) indicating the number */
  60.  /* of keys for this string.  Each key is a KEYDEF structure, with */
  61.  /* irrelevant contents, followed by the null-terminated string. */
  62.  
  63. /* If the number of keys is 0, then there are no keys for the string, */
  64.  /* in other words, the string will never be included.  If the number */
  65.  /* of keys is -1, this is a special flag indicating there are no keys */
  66.  /* in the file, and the string is mandatory (that is, it must be */
  67.  /* included regardless in the included output).  */
  68.  
  69. /* A file, then, looks like this:
  70.  
  71.   Precondition 1
  72.   Precondition 2
  73.   . 
  74.   .
  75.   .
  76.   <NUL>
  77.   Number of strings
  78.     STRINGDEF
  79.     String . . . <NUL>
  80.     Number of keys
  81.       KEYDEF
  82.       Key . . . <NUL>
  83.       KEYDEF 
  84.       Key . . . <NUL>
  85.       .
  86.       .
  87.       .
  88.     STRINGDEF
  89.     String . . . <NUL>
  90.     Number of keys
  91.       KEYDEF
  92.       Key . . . <NUL>
  93.       .
  94.       .
  95.       .
  96.     .
  97.     .
  98.     .
  99.  
  100. */
  101.